해시 함수
해시 함수
임의 크기 입력 → 고정 길이 출력, 단방향 함수 — 무결성 검증
해시 함수 요구사항
| 요구사항 | 설명 |
|---|---|
| 임의 크기 입력 | 어떤 크기의 데이터 블록에도 적용 가능 |
| 고정 길이 출력 | 항상 동일한 길이의 해시값 |
| 단방향 (역상저항성) | H(x)=h에서 x 역산 불가 |
| 제2역상저항성 (약한 충돌 방지) | H(y)=H(x)인 y 찾기 불가 |
| 충돌저항성 (강한 충돌 방지) | H(x)=H(y)인 (x,y) 쌍 찾기 불가 |
SHA 파라미터 비교
| SHA-1 | SHA-256 | SHA-384 | SHA-512 | |
|---|---|---|---|---|
| 해시 크기 | 160bit | 256bit | 384bit | 512bit |
| 메시지 최대 크기 | 2^64 | 2^64 | 2^128 | 2^128 |
| 블록 크기 | 512bit | 512bit | 1024bit | 1024bit |
| 워드 크기 | 32bit | 32bit | 64bit | 64bit |
| 라운드 수 | 80 | 64 | 80 | 80 |
| 보안 강도 | 80 | 128 | 192 | 256 |
보안 강도 n = 생일 공격 시 충돌 발생 작업량 ≈ 2^(n/2)
SHA-512 처리 과정
1. 비트 패딩
- 메시지 길이 mod 1024 = 896이 되도록 패딩
- 패딩: 1비트 + 0비트들 (100...0)
2. 길이 정보 추가
- 원본 메시지 길이 (128bit) 추가
- 최종 길이: N × 1024bit
3. 해시 버퍼 초기화
- 8개의 64bit 레지스터 (총 512bit)
4. 라운드 함수 80회
- 1024bit 블록을 16개 64bit 워드로 분할
- 80라운드를 위해 16→80 워드로 메시지 확장
SHA-3
- SHA-1/SHA-2가 동일한 구조·수학 문제 → 대안 개발
- 스펀지 구조(Sponge Construction) 사용 → SHA-2와 근본적으로 다른 설계
- 지원 해시 크기: 224, 256, 384, 512bit
HMAC (Hash-based MAC)
암호화 해시 함수로 MAC(메시지 인증 코드) 구현
설계 목적
- 수정 없이 기존 해시 함수 사용
- 더 좋은 해시 함수로 교체 용이
- 간단한 방법으로 키 사용
HMAC 공식
HMAC(K, M) = H[(K⁺ ⊕ opad) || H(K⁺ ⊕ ipad || M)]
K⁺ : 비밀키를 b비트로 패딩한 값
ipad : 0x36 반복 (내부 패딩)
opad : 0x5C 반복 (외부 패딩)
사용처: TLS, SET 등 인터넷 프로토콜
메시지 인증 방식
단방향 해시함수를 이용한 인증
(a) 대칭키 사용:
송신: H(M) → 암호화(K) → MAC 전송 + M
수신: H(수신M) vs 복호화(MAC)
(b) 공개키 사용:
송신: H(M) → 개인키 서명
수신: H(수신M) vs 공개키로 검증
해시 vs MAC vs 전자서명
| 구분 | 키 필요 | 목적 |
|---|---|---|
| 해시 | X | 무결성 검증 |
| MAC (HMAC) | 대칭키 | 무결성 + 인증 |
| 전자서명 | 비대칭키 | 무결성 + 인증 + 부인방지 |